%include "macros.asm"
%define src [ebp + 8]
%define dst [ebp + 12]
%define ancho [ebp + 16]
%define alto [ebp + 20]
%define paso [ebp + 24]


global asmRoberts
	
section .text

asmRoberts:

	C_pushs 0
	mov esi, src 		;movemos el puntero al comienzo de la matriz SRC a ESI
	mov edi, dst 		;movemos el puntero al comiendo de la matriz DST a EDI
	
	mov eax,paso 		;muevo a eax el ancho con basura y todo
	mov edx,alto 		;muevo a edx el alto
	
	mul edx				;en eax dejo guardado el ancho por el alto
	mov ecx,eax 		;ahora lo muevo a ECX para hacer un loop que vaya hasta el final
	mov edx,paso		;dejo el ancho con basura en edx
	sub ecx,edx 		;la ultima linea no la voy a recorrer
		
ciclo:
	
	xor ebx, ebx		;aca voy a guardar el pixel resultante
	xor eax, eax		;lo uso para calculos intermedios
	mov al, [esi]		;muevo a al el primer pixel
	add ebx, eax		;se lo sumo a ebx


	mov al, [esi+edx+1]	;muevo a al el cuarto pixel
	sub ebx, eax		;se lo resto a ebx

	saturar ebx		;saturo el pixel
	push ebx

	;pasada para y

	xor ebx, ebx		;aca voy a guardar el pixel resultante
	xor eax,eax
	mov al, [esi+1]		;muevo a al el segundo pixel
	add ebx, eax		;se lo sumo a ebx
	
	mov al, [esi+edx]	;muevo a al el tercer pixel
	sub ebx, eax		;se lo resto a ebx

	saturar ebx			;saturo el pixel
	pop eax				;levanto el pixel de la pasada en x
	add ebx, eax		;sumo los pixeles de ambas pasadas
	saturar ebx			;saturo la suma

	

	mov [edi], bl		;guardo el resultado
	

	;preparo las cosas para seguir
	inc edi
	inc esi
	dec ecx
	cmp ecx, 0
	jg ciclo
	
	mov eax, dst
	mov ebx, alto
	rellenarBordes eax, edx, ebx
	
	C_pops 0	
	ret
